#!/usr/bin/perl -w

#Funciones para manejar "Assessments"
#Manuel Torres Fernández
#25/09/06

##############################################################
# Función:  get_elements
# Utilidad: Obtiene los elementos
##############################################################
sub get_elements
{
    local ($dbName) = @_;
    local ($sth, $sql, $numRows, %data);
    
    $dbh = &openDB($dbName);

    $sql = "SELECT * FROM Element;"; 

    $sth = $dbh->prepare($sql);
    $sth->execute || die "No se puede ejecutar la orden SQL";

    $numRows = 0;
    while ($row = $sth->fetchrow_hashref)
    {
	$numRows = $numRows + 1;
	$data{'idElement'.$numRows}   = $row->{idElement};
	$data{'nombre'.$numRows} = $row->{nombre};
	$data{'name'.$numRows} = $row->{name};
    }
    $data{numRows} = $numRows;
    
   $dbh->disconnect;

    return %data;
}

##############################################################
# Función:  get_aspects
# Utilidad: Obtiene los aspectos
##############################################################
sub get_aspects
{
    local ($dbName, $element) = @_;
    local ($sth, $sql, $numRows, %data);
    
    $dbh = &openDB($dbName);

    $sql = "SELECT Aspect.idAspect,Aspect.nombre,Aspect.name FROM Aspect, ElementAndAspect AS a,Element AS e WHERE Aspect.idAspect = a.idAspect AND (e.nombre=\'$element\' OR e.name=\'$element\') AND a.idElement=e.idElement;";
    $sth = $dbh->prepare($sql);
    $sth->execute || die "No se puede ejecutar la orden SQL";

    $numRows = 0;
    while ($row = $sth->fetchrow_hashref)
    {
	$numRows = $numRows + 1;
	$data{'idAspect'.$numRows}   = $row->{idAspect};
	$data{'nombre'.$numRows} = $row->{nombre};
	$data{'name'.$numRows} = $row->{name};
    }
    $data{numRows} = $numRows;
    
    $dbh->disconnect;

    return %data;
}


##############################################################
# Función:  get_assessments
# Utilidad: Obtiene las valoraciones de un autor y documento
##############################################################
sub get_assessments
{
    local ($dbName, $id_author, $id_description) = @_;
    local ($sth, $sql, $numRows, %data);
    
    $dbh = &openDB($dbName);

    $sql = "SELECT * FROM Assessment WHERE idAuthor=$id_author AND idDescription=$id_description;"; 

    $sth = $dbh->prepare($sql);
    $sth->execute || die "No se puede ejecutar la orden SQL";

    $numRows = 0;
    while ($row = $sth->fetchrow_hashref)
    {
	$numRows = $numRows + 1;
	$data{'idAssessment'.$numRows}   = $row->{idAssessment};
	$data{'idAuthor'.$numRows}   = $row->{idAuthor};
	$data{'idDescription'.$numRows}   = $row->{idDescription};
	$data{'idElementAspect'.$numRows}   = $row->{idElementAspect};
	$data{'Appropriateness'.$numRows}   = $row->{Appropriateness};

	$idEA=$row->{idElementAspect};
	$sql_int = "SELECT * FROM ElementAndAspect WHERE idElementAspect=\'$idEA\';"; 

	$sth_int = $dbh->prepare($sql_int);
	$sth_int->execute || die "No se puede ejecutar la orden SQL";
	$row_int = $sth_int->fetchrow_hashref;

	$idElement   = $row_int->{idElement};
	$idAspect   = $row_int->{idAspect};

  
	$sql_int = "SELECT * FROM Element WHERE idElement=\'$idElement\';"; 

	$sth_int = $dbh->prepare($sql_int);
	$sth_int->execute || die "No se puede ejecutar la orden SQL";
	$row_int = $sth_int->fetchrow_hashref;

	$data{'Element'.$numRows}   = $row_int->{nombre};
	$data{'Element_en'.$numRows}   = $row_int->{name};

	$sql_int = "SELECT * FROM Aspect WHERE idAspect=\'$idAspect\';"; 

	$sth_int = $dbh->prepare($sql_int);
	$sth_int->execute || die "No se puede ejecutar la orden SQL";
	$row_int = $sth_int->fetchrow_hashref;

	$data{'Aspect'.$numRows}   = $row_int->{nombre};
	$data{'Aspect_en'.$numRows}   = $row_int->{name};

    }
    $data{numRows} = $numRows;
    
    $dbh->disconnect;

    return %data;
}

##############################################################
# Función:  save_assessment
# Utilidad: Almacena las valoraciones asociadas a un documento y un autor
##############################################################
sub save_assessment
{
    local($dbName, $id_description, $id_author, @assessments)= @_;
    local($dbh);

        
    $dbh = &openDB($dbName);

    for($i=0;$i<$#assessments; $i=$i+3)#@assessments contiene ternas (idElement,idAspect,Appropriateness)
    {
	$aux=$i+1;

	$sql_int = "SELECT idElement FROM Element WHERE nombre=\'$assessments[$i]\';"; 

	$sth_int = $dbh->prepare($sql_int);
	$sth_int->execute || die "No se puede ejecutar la orden SQL";
	$row_int = $sth_int->fetchrow_hashref;

	$idE=$row_int->{idElement};

	$sql_int = "SELECT idAspect FROM Aspect WHERE nombre=\'$assessments[$aux]\';"; 

	$sth_int = $dbh->prepare($sql_int);
	$sth_int->execute || die "No se puede ejecutar la orden SQL";
	$row_int = $sth_int->fetchrow_hashref;

	$idA=$row_int->{idAspect};


	$sql_int = "SELECT idElementAspect FROM ElementAndAspect WHERE idElement=\'$idE\' AND idAspect=\'$idA\';"; 

	$sth_int = $dbh->prepare($sql_int);
	$sth_int->execute || die "No se puede ejecutar la orden SQL";
	$row_int = $sth_int->fetchrow_hashref;

	$idEA=$row_int->{idElementAspect};

	$aux=$i+2;

	$sql = "INSERT INTO Assessment SET idAuthor=$id_author,idDescription=$id_description,idElementAspect=\'$idEA\',Appropriateness=$assessments[$aux];";	    
	$sth = $dbh->prepare($sql);
	$sth->execute || die "No se puede ejecutar la orden SQL";
    }
    
    $sql = "SELECT LAST_INSERT_ID(idAssessment) AS idlast FROM Assessment;";
    $sth = $dbh->prepare($sql);
    $sth->execute || die "No se puede ejecutar la orden SQL";
    
    while ($row = $sth->fetchrow_hashref)
    {
	$idIdea = $row->{idlast};
    }
    $dbh->disconnect;

    return($idIdea);

}

return 1;
